//
//  HPYHomeViewController.swift
//  SwiftVVBo
//
//  Created by hepeiyong on 16/8/9.
//  Copyright © 2016年 hpyhn. All rights reserved.
//

import UIKit
import SVProgressHUD
// cell可重用标示符
private let HPYHomeViewCellId = "HPYHomeViewCellId"
class HPYHomeViewController: HPYVisitorViewController {

    // 创建一个ViewModel
    private lazy var statusListViewModel: HPYStatusListViewModel = HPYStatusListViewModel()
    // 刷新控件
    let refreshControl = HPYRefreshControl()
    override func viewDidLoad() {
        super.viewDidLoad()
        if !isLogin {
            visitorView?.setupVisitorViewInfo(nil, title: nil)
            // 如果没有登录的话设置未登录信息和logo 也就没有必要再加载数据了 所以return
            return
        }
        setupTableViewInfo()
        loadData()

    }
    // MARK: - 设置tableView相关信息
    func setupTableViewInfo(){
        // 注册cell
        tableView.registerClass(HPYStatusCell.self, forCellReuseIdentifier: HPYHomeViewCellId)
        // 设置代理
        tableView.dataSource = self
        tableView.delegate = self
        // 设置高度(自动计算行高)(使用contetView 的高度来得到cell 高度)
        tableView.rowHeight = UITableViewAutomaticDimension
        // 设置预估行高(预估行高越接近真实高度越好)
        tableView.estimatedRowHeight = 200
        // 设置footView
        tableView.tableFooterView = activityView

        // 添加事件
        refreshControl.addTarget(self, action: #selector(HPYHomeViewController.refreshAction), forControlEvents: UIControlEvents.ValueChanged)
        // 添加到tableView身上
        tableView.addSubview(refreshControl)
        tableView.separatorStyle = .None

        //MARK: -- 刷新后返回主页通知
        NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(HPYHomeViewController.refresh), name: "refreshDate", object: nil)

    }

    //MARK: -- 刷新主页发布信息
    func refresh(){
        loadData()
        self.tableView.setContentOffset(CGPoint(x: 0, y: -64), animated: false)
    }

    func refreshAction(){
        printLog("请求数据")
        loadData()
    }

    // 菊花
    private lazy var activityView: UIActivityIndicatorView = {
        let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        view.color = AppThemeColor
        return view
    }()

}
//MARK: - UITableViewDataSource
extension HPYHomeViewController: UITableViewDataSource, UITableViewDelegate {

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusListViewModel.dataArray.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(HPYHomeViewCellId, forIndexPath: indexPath) as! HPYStatusCell
        cell.statusViewModel = statusListViewModel.dataArray[indexPath.row]
        return cell
    }

    func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        // 如果是最后一个cell  而且菊花没有动画
        if indexPath.row + 1 == statusListViewModel.dataArray.count && !activityView.isAnimating() {
            printLog(indexPath.row)
            // 设置动画
            activityView.startAnimating()
            // 请求数组
            loadData()
        }
    }
}

extension HPYHomeViewController {
    func loadData(){
        // 请求数据 true 为上拉加载更多   false  下拉刷新
        statusListViewModel.loadData(activityView.isAnimating()) { (isSuccess) -> () in
            self.endRefreshing()
            if !isSuccess {
                printLog("请求数据失败")
                return
            }

            // 请求数据成功
            printLog("请求数据成功")
            // 刷新UI
            self.tableView.reloadData()
        }
    }
    // 停止动画
    func endRefreshing(){
        self.activityView.stopAnimating()
        self.refreshControl.endRefreshing()
    }
}